{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import os\n",
    "import time\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from itertools import combinations\n",
    "import multiprocessing as mp\n",
    "\n",
    "from sklearn.cluster import KMeans, MiniBatchKMeans\n",
    "from sklearn import metrics, svm\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>event_id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>start_time</th>\n",
       "      <th>city</th>\n",
       "      <th>state</th>\n",
       "      <th>zip</th>\n",
       "      <th>country</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "      <th>c_1</th>\n",
       "      <th>...</th>\n",
       "      <th>c_92</th>\n",
       "      <th>c_93</th>\n",
       "      <th>c_94</th>\n",
       "      <th>c_95</th>\n",
       "      <th>c_96</th>\n",
       "      <th>c_97</th>\n",
       "      <th>c_98</th>\n",
       "      <th>c_99</th>\n",
       "      <th>c_100</th>\n",
       "      <th>c_other</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>9042</td>\n",
       "      <td>3647864012</td>\n",
       "      <td>2012-10-31T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6180</td>\n",
       "      <td>3476440521</td>\n",
       "      <td>2012-11-03T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7375</td>\n",
       "      <td>517514445</td>\n",
       "      <td>2012-11-05T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4446</td>\n",
       "      <td>781585781</td>\n",
       "      <td>2012-10-30T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>13108</td>\n",
       "      <td>1016098580</td>\n",
       "      <td>2012-09-27T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 110 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   event_id     user_id                start_time city state  zip country  \\\n",
       "0      9042  3647864012  2012-10-31T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "1      6180  3476440521  2012-11-03T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "2      7375   517514445  2012-11-05T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "3      4446   781585781  2012-10-30T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "4     13108  1016098580  2012-09-27T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "\n",
       "   lat  lng  c_1   ...     c_92  c_93  c_94  c_95  c_96  c_97  c_98  c_99  \\\n",
       "0  NaN  NaN    2   ...        0     1     0     0     0     0     0     0   \n",
       "1  NaN  NaN    2   ...        0     0     0     0     0     0     0     0   \n",
       "2  NaN  NaN    0   ...        0     0     0     0     0     0     0     0   \n",
       "3  NaN  NaN    1   ...        0     0     0     0     0     0     0     0   \n",
       "4  NaN  NaN    1   ...        0     0     0     0     0     0     0     0   \n",
       "\n",
       "   c_100  c_other  \n",
       "0      0        9  \n",
       "1      0        7  \n",
       "2      0       12  \n",
       "3      0        8  \n",
       "4      0        9  \n",
       "\n",
       "[5 rows x 110 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = 'data'\n",
    "out_path = 'out'\n",
    "data_events_useful = pd.read_csv(os.path.join(out_path, 'events_useful.csv'))\n",
    "data_events_useful.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 13418 entries, 0 to 13417\n",
      "Columns: 110 entries, event_id to c_other\n",
      "dtypes: float64(2), int64(103), object(5)\n",
      "memory usage: 11.3+ MB\n"
     ]
    }
   ],
   "source": [
    "data_events_useful.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False    101\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_events_useful.loc[:,'c_1':'c_other'].isnull().any().value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 提取数据属性进行聚类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>c_1</th>\n",
       "      <th>c_2</th>\n",
       "      <th>c_3</th>\n",
       "      <th>c_4</th>\n",
       "      <th>c_5</th>\n",
       "      <th>c_6</th>\n",
       "      <th>c_7</th>\n",
       "      <th>c_8</th>\n",
       "      <th>c_9</th>\n",
       "      <th>c_10</th>\n",
       "      <th>...</th>\n",
       "      <th>c_92</th>\n",
       "      <th>c_93</th>\n",
       "      <th>c_94</th>\n",
       "      <th>c_95</th>\n",
       "      <th>c_96</th>\n",
       "      <th>c_97</th>\n",
       "      <th>c_98</th>\n",
       "      <th>c_99</th>\n",
       "      <th>c_100</th>\n",
       "      <th>c_other</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 101 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   c_1  c_2  c_3  c_4  c_5  c_6  c_7  c_8  c_9  c_10   ...     c_92  c_93  \\\n",
       "0    2    0    2    0    0    0    0    0    0     0   ...        0     1   \n",
       "1    2    0    2    0    0    0    0    0    0     0   ...        0     0   \n",
       "2    0    0    0    0    0    0    0    0    0     0   ...        0     0   \n",
       "3    1    0    2    1    0    0    0    0    0     0   ...        0     0   \n",
       "4    1    1    0    0    0    0    0    2    0     0   ...        0     0   \n",
       "\n",
       "   c_94  c_95  c_96  c_97  c_98  c_99  c_100  c_other  \n",
       "0     0     0     0     0     0     0      0        9  \n",
       "1     0     0     0     0     0     0      0        7  \n",
       "2     0     0     0     0     0     0      0       12  \n",
       "3     0     0     0     0     0     0      0        8  \n",
       "4     0     0     0     0     0     0      0        9  \n",
       "\n",
       "[5 rows x 101 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "attr_events_useful = data_events_useful.loc[:,'c_1':'c_other']\n",
    "attr_events_useful.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> # Cluster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "ParamDefault = {\n",
    "    'n_clusters' : 10,\n",
    "    'init' : 'k-means++',\n",
    "    'n_init' : 8,\n",
    "    'random_state' : 3\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def K_means_analysis(alg, data_train, **kwarg):\n",
    "    tmp = time.time()\n",
    "    param = ParamDefault.copy()\n",
    "    param.update(kwarg)\n",
    "    \n",
    "    kms = alg(**param)\n",
    "    kms.fit(data_train)\n",
    "    CH_score = metrics.silhouette_score(data_train, kms.predict(data_train))\n",
    "    \n",
    "    print('alg:{}, param:{}, CH_score:{}, used time:{}'.format(alg.__name__, kwarg, CH_score, time.time() - tmp))\n",
    "    return CH_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def FindBestAxisToRefrect(data_train, y_train):\n",
    "    feature_combine = list(combinations(data_train.columns, 2))\n",
    "    model = svm.SVC(kernel='linear', gamma=0.7, C = 1)\n",
    "    \n",
    "    scores = []\n",
    "    \n",
    "    process = 0\n",
    "    for item in feature_combine:\n",
    "        print('\\r', process, end = '')\n",
    "        \n",
    "        data_split = data_train.loc[:, item]\n",
    "        model.fit(data_split, y_train)\n",
    "        score = model.score(data_split, y_train)\n",
    "        scores.append(score)\n",
    "        process = process + 1\n",
    "\n",
    "    return scores,feature_combine"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# KMeans cluster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alg:KMeans, param:{'n_clusters': 10, 'n_jobs': -1}, CH_score:0.5057365918548711, used time:9.73362135887146\n",
      "alg:KMeans, param:{'n_clusters': 20, 'n_jobs': -1}, CH_score:0.3563202566377888, used time:9.000974178314209\n",
      "alg:KMeans, param:{'n_clusters': 30, 'n_jobs': -1}, CH_score:0.27538889165492697, used time:8.532159566879272\n",
      "alg:KMeans, param:{'n_clusters': 40, 'n_jobs': -1}, CH_score:0.2546853826577815, used time:9.185295820236206\n",
      "alg:KMeans, param:{'n_clusters': 50, 'n_jobs': -1}, CH_score:0.20667470306005364, used time:9.939883947372437\n",
      "alg:KMeans, param:{'n_clusters': 60, 'n_jobs': -1}, CH_score:0.21573000276483442, used time:10.444692850112915\n",
      "alg:KMeans, param:{'n_clusters': 70, 'n_jobs': -1}, CH_score:0.17515295315455326, used time:9.654791355133057\n",
      "alg:KMeans, param:{'n_clusters': 80, 'n_jobs': -1}, CH_score:0.18420105019853109, used time:10.244183540344238\n",
      "alg:KMeans, param:{'n_clusters': 90, 'n_jobs': -1}, CH_score:0.14327907667798637, used time:11.126203775405884\n",
      "alg:KMeans, param:{'n_clusters': 100, 'n_jobs': -1}, CH_score:0.1650057101671442, used time:11.945997714996338\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b9f36edd30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "kmeans_k_list = []\n",
    "kmeans_score_list = []\n",
    "for k in range(10, 110, 10):\n",
    "    kmeans_k_list.append(k)\n",
    "    kmeans_score = K_means_analysis(KMeans, attr_events_useful, n_clusters=k, n_jobs = -1)\n",
    "    kmeans_score_list.append(kmeans_score)\n",
    "    \n",
    "plt.plot(kmeans_k_list, kmeans_score_list)\n",
    "plt.title('KMeans score', fontsize = 15)\n",
    "plt.xlabel('K', fontsize = 15)\n",
    "plt.ylabel('CH score', fontsize = 15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> As we can see, the best score is get at K = 10. this is locate at the edge of our search list, so we continue search begin the edge to outside"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## We use best K to visualize data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best K is 10\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "9    5721\n",
       "1    3915\n",
       "5    2391\n",
       "0     914\n",
       "6     349\n",
       "3      99\n",
       "7      25\n",
       "4       2\n",
       "2       1\n",
       "8       1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k = kmeans_k_list[np.argmax(kmeans_score_list)]\n",
    "print('best K is', k)\n",
    "\n",
    "# prepare paremeter\n",
    "param = ParamDefault.copy()\n",
    "param['n_clusters'] = k\n",
    "param['n_jobs'] = -1\n",
    "param['n_init'] = 16\n",
    "\n",
    "# cluster\n",
    "kms = KMeans(**param)\n",
    "kms.fit(attr_events_useful)\n",
    "y_pred_label = kms.predict(attr_events_useful)\n",
    "\n",
    "pd.Series(y_pred_label).value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b9819949b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "colors = ['b','g','r','k','c','m','y','#e24fff','#524C90','#845868']\n",
    "columns = attr_events_useful.columns\n",
    "tmp = attr_events_useful.copy()\n",
    "tmp['y_label'] = y_pred_label\n",
    "\n",
    "drop_list = []\n",
    "plt.figure(figsize = (20, 9))\n",
    "plt.xlim([0, 80])\n",
    "plt.ylim([0, 80])\n",
    "for i in range(k):\n",
    "    tmp_k = tmp[tmp.y_label == i]\n",
    "    x_1 = tmp_k['c_1'].reset_index(drop = True)\n",
    "    x_2 = tmp_k['c_2'].reset_index(drop = True)\n",
    "    \n",
    "    total_number = 20 if x_1.shape[0] > 20 else x_1.shape[0]\n",
    "    l = -1\n",
    "    m = 0\n",
    "    while True:\n",
    "        l = l + 1\n",
    "        if l >= x_1.shape[0]:\n",
    "            break\n",
    "        if x_1[l] > 80 or x_2[l] > 80:\n",
    "            continue\n",
    "        plt.text(x_1[l], x_2[l], str(i), color = colors[i])\n",
    "        m = m + 1\n",
    "        if m > total_number:\n",
    "            break\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MiniBatchKMeans cluster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alg:MiniBatchKMeans, param:{'n_clusters': 10}, CH_score:0.38081485724535025, used time:5.8122947216033936\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 20}, CH_score:0.2219880305367688, used time:5.452419281005859\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 30}, CH_score:0.176644183484463, used time:5.485641956329346\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 40}, CH_score:0.16486672458843138, used time:5.361497640609741\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 50}, CH_score:0.1363921067576807, used time:5.518788576126099\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 60}, CH_score:0.13576627426349908, used time:5.358556747436523\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 70}, CH_score:0.0830224669968601, used time:5.43813419342041\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 80}, CH_score:0.10866077633936529, used time:5.369939088821411\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 90}, CH_score:0.08560146135756026, used time:5.381567716598511\n",
      "alg:MiniBatchKMeans, param:{'n_clusters': 100}, CH_score:0.0672570312967138, used time:5.643904209136963\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b980886710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "minik_k_list = []\n",
    "minik_score_list = []\n",
    "for k in range(10, 110, 10):\n",
    "    minik_k_list.append(k)\n",
    "    minik_score = K_means_analysis(MiniBatchKMeans, attr_events_useful, n_clusters=k)\n",
    "    minik_score_list.append(minik_score)\n",
    "    \n",
    "plt.plot(minik_k_list, minik_score_list)\n",
    "plt.title('MiniBatchKMeans score', fontsize = 15)\n",
    "plt.xlabel('K', fontsize = 15)\n",
    "plt.ylabel('CH score', fontsize = 15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## We use best K to visualize data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best K is 10\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0    3907\n",
       "8    2252\n",
       "5    1996\n",
       "9    1865\n",
       "2    1572\n",
       "1     954\n",
       "4     422\n",
       "7     231\n",
       "3     190\n",
       "6      29\n",
       "dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k = minik_k_list[np.argmax(minik_score_list)]\n",
    "print('best K is', k)\n",
    "\n",
    "# prepare paremeter\n",
    "param = ParamDefault.copy()\n",
    "param['n_clusters'] = k\n",
    "param['n_init'] = 16\n",
    "\n",
    "# cluster\n",
    "mbkms = MiniBatchKMeans(**param)\n",
    "mbkms.fit(attr_events_useful)\n",
    "y_pred_label = mbkms.predict(attr_events_useful)\n",
    "\n",
    "pd.Series(y_pred_label).value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b981b0e160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "colors = ['b','g','r','k','c','m','y','#e24fff','#524C90','#845868']\n",
    "columns = attr_events_useful.columns\n",
    "tmp = attr_events_useful.copy()\n",
    "tmp['y_label'] = y_pred_label\n",
    "\n",
    "drop_list = []\n",
    "plt.figure(figsize = (20, 9))\n",
    "plt.xlim([0, 80])\n",
    "plt.ylim([0, 80])\n",
    "for i in range(k):\n",
    "    tmp_k = tmp[tmp.y_label == i]\n",
    "    x_1 = tmp_k['c_1'].reset_index(drop = True)\n",
    "    x_2 = tmp_k['c_2'].reset_index(drop = True)\n",
    "    \n",
    "    total_number = 20 if x_1.shape[0] > 20 else x_1.shape[0]\n",
    "    l = -1\n",
    "    m = 0\n",
    "    while True:\n",
    "        l = l + 1\n",
    "        if l >= x_1.shape[0]:\n",
    "            break\n",
    "        if x_1[l] > 80 or x_2[l] > 80:\n",
    "            continue\n",
    "        plt.text(x_1[l], x_2[l], str(i), color = colors[i])\n",
    "        m = m + 1\n",
    "        if m > total_number:\n",
    "            break\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
